/**
 * 个人资料相关API接口
 * 基于后端API文档：我的模块API.md
 */

import type {
  GetProfileDetailResponse,
  ProfileInfoRespVO,
  ProfileUpdateReqVO,
  UpdateProfileResponse,
  UploadAvatarResponse,
  UserStatsOverviewRespVO,
} from '@/types/profile'
import { http } from '@/utils/request'

/**
 * 获取用户基本信息
 * GET /api/profile/profile
 */
export function getUserProfile() {
  return http.get<ProfileInfoRespVO>('/reading/profile/profile')
}

/**
 * 获取用户详细信息
 * GET /api/profile/info
 */
export function getUserDetailInfo() {
  return http.get<GetProfileDetailResponse>('/reading/profile/info')
}

/**
 * 更新用户信息
 * PUT /api/profile/info
 */
export function updateUserInfo(data: ProfileUpdateReqVO) {
  return http.put<UpdateProfileResponse>('/reading/profile/info', data)
}

/**
 * 上传用户头像
 * POST /api/profile/avatar
 */
export function uploadUserAvatar(file: File) {
  const formData = new FormData()
  formData.append('avatar', file)

  return http.post<UploadAvatarResponse>('/reading/profile/avatar', formData, {
    headers: {
      'Content-Type': 'multipart/form-data',
    },
  })
}

/**
 * 获取用户统计概览
 * GET /api/user/stats/overview
 */
export function getUserStatsOverview() {
  return http.get<UserStatsOverviewRespVO>('/reading/user/stats/overview')
}

// 注释掉手机号验证API
// /**
//  * 验证手机号格式
//  * POST /api/profile/validate-phone
//  */
// export function validatePhoneFormat(phone: string) {
//   return http.post<{ code: number, message: string, data: boolean }>('/reading/profile/validate-phone', {
//     phone,
//   })
// }

// ==================== 工具函数 ====================

/**
 * 验证头像文件
 */
export function validateAvatarFile(file: File): { valid: boolean, error?: string } {
  // 检查文件类型
  const allowedTypes = ['image/jpeg', 'image/png', 'image/gif']
  if (!allowedTypes.includes(file.type)) {
    return {
      valid: false,
      error: '只支持 JPG、PNG、GIF 格式的图片',
    }
  }

  // 检查文件大小 (2MB)
  const maxSize = 2 * 1024 * 1024
  if (file.size > maxSize) {
    return {
      valid: false,
      error: '图片大小不能超过 2MB',
    }
  }

  return { valid: true }
}

/**
 * 验证手机号格式
 */
export function validatePhone(phone: string): boolean {
  const phoneRegex = /^1[3-9]\d{9}$/
  return phoneRegex.test(phone)
}

/**
 * 验证邮箱格式
 */
export function validateEmail(email: string): boolean {
  const emailRegex = /^[^\s@]+@[^\s@][^\s.@]*\.[^\s@]+$/
  return emailRegex.test(email)
}

/**
 * 格式化用户统计数据
 */
export function formatUserStats(stats: UserStatsOverviewRespVO) {
  return {
    ...stats,
    // 格式化显示文本
    punchDaysText: `${stats.totalPunchDays}天`,
    readBooksText: `${stats.totalReadBooks}本`,
    streakText: `${stats.currentStreak}天`,
    favoritesText: `${stats.totalFavorites}个`,
    recordingsText: `${stats.totalRecordings}个`,
    classesText: `${stats.joinedClasses}个`,
    assignmentsText: `${stats.completedAssignments}个`,
  }
}

/**
 * 处理头像URL
 */
export function processAvatarUrl(avatarUrl: string): string {
  // 如果是相对路径，添加基础URL
  if (avatarUrl && !avatarUrl.startsWith('http')) {
    // 这里可以根据实际情况配置基础URL
    const baseUrl = import.meta.env.VITE_SERVER_BASEURL || ''
    return `${baseUrl}${avatarUrl}`
  }
  return avatarUrl
}

/**
 * 获取默认头像
 */
export function getDefaultAvatar(gender?: 'male' | 'female'): string {
  const defaultAvatars = {
    male: '/static/avatars/boy1.png',
    female: '/static/avatars/girl1.png',
    default: '/static/avatars/default.png',
  }

  return defaultAvatars[gender || 'default']
}

// ==================== 错误处理 ====================

/**
 * 处理个人资料API错误
 */
export function handleProfileError(error: any): string {
  const errorMessages: Record<number, string> = {
    50001: '用户信息不存在',
    50002: '昵称不能为空',
    50003: '手机号格式错误',
    50004: '头像上传失败',
  }

  const code = error?.response?.data?.code || error?.code
  return errorMessages[code] || error?.message || '操作失败，请重试'
}

// ==================== 缓存相关 ====================

/**
 * 缓存键名
 */
export const CACHE_KEYS = {
  USER_PROFILE: 'user_profile',
  USER_STATS: 'user_stats',
  USER_DETAIL: 'user_detail',
}

/**
 * 清除用户相关缓存
 */
export function clearUserCache() {
  Object.values(CACHE_KEYS).forEach((key) => {
    uni.removeStorageSync(key)
  })
}

/**
 * 缓存用户信息
 */
export function cacheUserProfile(profile: ProfileInfoRespVO) {
  uni.setStorageSync(CACHE_KEYS.USER_PROFILE, profile)
}

/**
 * 获取缓存的用户信息
 */
export function getCachedUserProfile(): ProfileInfoRespVO | null {
  try {
    return uni.getStorageSync(CACHE_KEYS.USER_PROFILE) || null
  }
  catch {
    return null
  }
}

/**
 * 缓存用户统计
 */
export function cacheUserStats(stats: UserStatsOverviewRespVO) {
  uni.setStorageSync(CACHE_KEYS.USER_STATS, stats)
}

/**
 * 获取缓存的用户统计
 */
export function getCachedUserStats(): UserStatsOverviewRespVO | null {
  try {
    return uni.getStorageSync(CACHE_KEYS.USER_STATS) || null
  }
  catch {
    return null
  }
}
